﻿namespace Microsoft.SmallBasic.Library
{
    using Microsoft.SmallBasic.Library.Internal;
    using System;
    using System.Text;

    [SmallBasicType]
    public static class TextWindow
    {
        private static bool _windowVisible;

        public static void Clear()
        {
            VerifyAccess();
            // TODO:
        }

        public static void Hide()
        {
            // TODO:
        }

        public static void Pause()
        {
            VerifyAccess();
            Console.WriteLine("Press any key to continue...");
            // TODO:
        }

        public static void PauseIfVisible()
        {
            if (_windowVisible)
            {
                Pause();
            }
        }

        public static void PauseWithoutMessage()
        {
            VerifyAccess();
            // TODO:
        }

        public static Primitive Read()
        {
            VerifyAccess();
            return new Primitive(Console.ReadLine());
        }

        [HideFromIntellisense]
        public static Primitive ReadKey()
        {
            VerifyAccess();
            // TODO:
            return null;
        }

        public static Primitive ReadNumber()
        {
            // TODO:
            return null;
        }

        public static void Show()
        {
            // TODO:
        }

        private static void VerifyAccess()
        {
            if (!_windowVisible)
            {
                Show();
            }
        }

        public static void Write(Primitive data)
        {
            VerifyAccess();
            Console.Write((string) data);
        }

        public static void WriteLine(Primitive data)
        {
            VerifyAccess();
            Console.WriteLine((string) data);
        }

        public static Primitive BackgroundColor
        {
            get
            {
                VerifyAccess();
                // TODO:
                return null;
            }
            set
            {
                VerifyAccess();
                try
                {
                    // TODO:
                }
                catch
                {
                }
            }
        }

        public static Primitive CursorLeft
        {
            get
            {
                VerifyAccess();
                // TODO:
                return null;
            }
            set
            {
                VerifyAccess();
                // TODO:
            }
        }

        public static Primitive CursorTop
        {
            get
            {
                VerifyAccess();
                // TODO:
                return null;
            }
            set
            {
                VerifyAccess();
                // TODO:
            }
        }

        public static Primitive ForegroundColor
        {
            get
            {
                VerifyAccess();
                // TODO:
                return null;
            }
            set
            {
                VerifyAccess();
                try
                {
                    // TODO:
                }
                catch
                {
                }
            }
        }

        public static Primitive Left
        {
            get
            {
                // TODO:
                return null;
            }
            set
            {
                // TODO:
            }
        }

        public static Primitive Title
        {
            get
            {
                VerifyAccess();
                // TODO:
                return null;
            }
            set
            {
                VerifyAccess();
                // TODO:
            }
        }

        public static Primitive Top
        {
            get
            {
                // TODO:
                return null;
            }
            set
            {
                // TODO:
            }
        }
    }
}

